package com.jerry.base.collection.list;

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

/**
 * Created with IntelliJ IDEA
 * User: Jerry
 * Date: 2024/1/29
 * Time: 20:24
 * Description:
 */
@Slf4j
public class ListUsage {

    @Test
    public void constructor() {
        // 当创建Arraylist对象时，如果使用的是无参构造器，则初始elementData容量力0
        // 第1次添加，则扩容elementData为10，如需要再次扩容，则扩容elementData为1.5倍。
        List<Integer> list = new ArrayList<>();
        log.info("list.size() = {}", list.size());

        // 如果使用的是指定大小的构造器，则初始elementData容量为指定大小
        // 如果需要扩容，则直接扩容elementData为1.5倍。
        List<Integer> list2 = new ArrayList<>(10);
        log.info("list2.size() = {}", list2.size());

        List<Integer> list3 = new ArrayList<>(list);
        log.info("list3.size() = {}", list3.size());
    }

    @Test
    public void method() {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        log.info("list = {}", list);

        list.set(3, 33);
        log.info("list = {}", list);

        // 取出 [1, 3) 区间的元素，原集合大小不变
        List<Integer> subList = list.subList(1, 3);
        log.info("subList = {}", subList);
        log.info("list = {}", list);
    }

    @Test
    public void detail() {
        List<Integer> list = new ArrayList<>();
        // 可以存放null进去
        list.add(null);
        list.add(4);
        list.add(null);
        log.info("list = {}", list);
    }
}
